package org.dbstar.scheduler.control;

import java.util.List;

import org.dbstar.scheduler.beans.Catalog;
import org.dbstar.scheduler.control.exception.DaoException;


/**
 * 提供控制Catalog的接口方法
 * 
 * @author 代波
 * @since 1.0.0
 * @version 1.0.0
 * @date 2012-4-22
 */
public interface CatalogController {
	/**
	 * 获得根目录
	 * 
	 * @return 根目录
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public Catalog getRootCatalog() throws DaoException;

	/**
	 * 获得所有Catalog的列表，所有Catalog按照parent,id顺序排列
	 * 
	 * @return Catalog列表，若无任何匹配的Catalog，返回size为0的List
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public List<Catalog> getAllCatalogs() throws DaoException;

	/**
	 * 获得一个Catalog的所有子Catalog的列表，所有Catalog按照id顺序排列
	 * 
	 * @param parent 父Catalog的ID
	 * @return Catalog列表，若无任何匹配的Catalog，返回size为0的List
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public List<Catalog> getSubCatalogs(int parent) throws DaoException;

	/**
	 * 获得ID对应的Catalog对象
	 * 
	 * @param id 待查询的Catalog的id
	 * @return ID对应的Catalog对象。若无匹配的Catalog则返回null。
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public Catalog getCatalog(int id) throws DaoException;

	/**
	 * 增加一个Catalog
	 * 
	 * @param cataLog 增加的目录信息
	 * @return 新增的Catalog的id
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public int addCatalog(Catalog cataLog) throws DaoException;

	/**
	 * 更新Catalog信息
	 * 
	 * @param cataLog 待更新的Catalog
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public void updateCatalog(Catalog cataLog) throws DaoException;

	/**
	 * 将指定的Catalog移动到新的父Catalog下。
	 * 
	 * @param catalogId 待移动的Catalog的ID
	 * @param parent 需要移动到的新的父Catalog的ID
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public void moveCatalog(int catalogId, int parent) throws DaoException;

	/**
	 * 删除id对应的Catalog
	 * 
	 * @param id catalog's id
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public void removeCatalog(int id) throws DaoException;
}
